import datetime
import random

from flask_script import Manager
from info import create_app
from flask_migrate import MigrateCommand


# 创建web应用
app = create_app("dev")


# 创建管理器
mgr = Manager(app)

# 生成迁移命令
mgr.add_command("mc", MigrateCommand)


# 生成管理员账号   flask-script可以将函数设置为自定义的命令
@mgr.option("-u", dest='username')  # 可以将有参函数设置为命令  python main.py create_superuser -u admin -p 123456
@mgr.option("-p",dest="password")
def create_superuser(username, password):
    if not all([username, password]):
        app.logger.error("管理员生成失败: 参数不足")
        return

    from info.utils.models import User
    from info import db
    # 增加一条管理员数据   is_admin字段为True
    user = User()
    user.mobile = username
    user.password = password
    user.nick_name = username
    user.is_admin = True

    try:
        db.session.add(user)
        db.session.commit()
    except BaseException as e:
        app.logger.error("管理员生成失败: 数据库错误 %s" % e)
        db.session.rollback()
        return

    app.logger.info("管理员生成成功")


@mgr.command
def add_test_users():  # 添加测试用户
    from info import db
    from info.utils.models import User
    users = []
    now = datetime.datetime.now()  # 当前时间对应的日期对象
    for num in range(0, 10000):
        try:
            user = User()
            user.nick_name = "%011d" % num
            user.mobile = "%011d" % num
            user.password_hash = "pbkdf2:sha256:50000$SgZPAbEj$a253b9220b7a916e03bf27119d401c48ff4a1c81d7e00644e0aaf6f3a8c55829"
            # 日期对象 +/- 日期间隔对象 = 新的日期对象
            user.create_time = now - datetime.timedelta(seconds=random.randint(0, 2678400))  # 随机注册时间 [2019-02-14, 2019-03-14]
            users.append(user)
            print(user.mobile)
        except Exception as e:
            print(e)
    db.session.add_all(users)
    db.session.commit()
    print('OK')


@mgr.command  # 可以将无参函数设置为命令  python main.py demo1
def demo1():
    print("demo1")


if __name__ == '__main__':
    mgr.run()